package bancosys.tec.services.input.driver.bean;

import java.util.LinkedList;
import java.util.List;

import jmine.tec.services.io.ServicesPageBean;
import bancosys.tec.datadigester.DigesterBean;
import bancosys.tec.utils.date.Date;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.annotations.XStreamOmitField;

/**
 * Bean que representa um arquivo XLS, guardando uma coleção de suas abas.
 * 
 * @author Kendji
 */
@XStreamAlias("importacao")
public class ServicePageHeader implements DigesterBean {

    private String fileName;

    @XStreamImplicit
    private List<ServicesPageBean> workSheets;

    @XStreamOmitField
    private transient Integer numberOfItems;

    /**
     * @return the fileName
     */
    public String getFileName() {
        return this.fileName;
    }

    /**
     * @param fileName the fileName to set
     */
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    /**
     * @return the workSheets
     */
    public List<ServicesPageBean> getWorkSheets() {
        if (this.workSheets == null) {
            this.workSheets = new LinkedList<ServicesPageBean>();
        }
        return this.workSheets;
    }

    /**
     * @param workSheets the workSheets to set
     */
    public void setWorkSheets(List<ServicesPageBean> workSheets) {
        this.workSheets = workSheets;
    }

    /**
     * Adiciona um ServicePageBean a lista.
     * 
     * @param bean servicePageBean que será adicionado a lista
     */
    public void addSheet(ServicesPageBean bean) {
        this.getWorkSheets().add(bean);
    }

    /**
     * Retorna a data em que o arquivo foi baixado do site.
     * 
     * @return data/hora em que o arquivo foi baixado.
     */
    public Date getFileDate() {
        return null;
    }

    /**
     * Se o arquivo está completo, isto é, baixado e processado sem erros.
     * 
     * @return <code>true</code> se o arquivo foi baixado e processado com sucesso, <code>false</code> caso contrário.
     */
    public boolean isComplete() {
        return true;
    }

    /**
     * @return numero de servicos a ser executado.
     */
    public int getNumberOfItems() {
        if (this.numberOfItems == null) {
            int total = 0;
            for (ServicesPageBean sp : this.getWorkSheets()) {
                total += sp.getServices().size();
            }
            this.numberOfItems = total;
        }
        return this.numberOfItems;
    }
}
